//============================================================================
// Copyright (C) 2009-2013 Brett R. Jones
//
// Issued to public domain
//
// brettjones1900@gmail.com
// http://www.p2panarchy.com
//============================================================================

#include <memory.h>
#include "VxConnectId.h"
#include "VxParse.h"
#include "vx_debug.h"
#include "VxSktUtil.h"

//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
VxConnectId::VxConnectId()
	: m_u16OnlinePort(0)
{
}

//////////////////////////////////////////////////////////////////////////////
VxConnectId& VxConnectId::operator =( const VxConnectId &a )
{
	if( this != &a )
	{
		// we can get away with memcpy because no virtual functions
		memcpy( this, &a, sizeof( VxConnectId ) );
	}
	return *this;
}

//////////////////////////////////////////////////////////////////////////////
bool VxConnectId::operator ==( const VxConnectId &a )  const
{
	return ( 0 == memcmp( this, &a, sizeof( VxConnectId )) );
}

//////////////////////////////////////////////////////////////////////////////
bool VxConnectId::operator !=( const VxConnectId &a )  const
{
	return ( 0 != memcmp( this, &a, sizeof( VxConnectId )) );
}

//////////////////////////////////////////////////////////////////////////////
void VxConnectId::setIpAddress( const char * pIp )		
{
	VxInetAddress oAddr;
	oAddr.setIp( pIp );
	if( oAddr.isValid() && oAddr.isIPv6() )
	{
		m_oIPv6OnlineIp = oAddr; 
	}
	else if( oAddr.isValid() )
	{
		m_oIPv4OnlineIp.setIp( oAddr.getIPv4AddressInNetOrder() );
	}
	else
	{
		vx_assert( false );
	}
};

////////////////////////////////////////////////////////////////////////////////
void VxConnectId::getIpAddress( std::string& retString )
{
	if( m_oIPv6OnlineIp.isValid() && VxCanConnectUsingIPv6() )
	{
		m_oIPv6OnlineIp.toStdString( retString );
	}
	m_oIPv4OnlineIp.toStdString( retString ); 
};

//////////////////////////////////////////////////////////////////////////////
void			VxConnectId::getIPv4( std::string& retString )	
{ 
	m_oIPv4OnlineIp.toStdString(retString); 
};

//////////////////////////////////////////////////////////////////////////////
void			VxConnectId::getIPv6( std::string& retString )
{
	m_oIPv6OnlineIp.toStdString(retString); 
}
